package cn.gok.servlet;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Author: chenfan
 * @Date: 2020/12/6 15:18
 * @Description: 封装请求信息对象
 */
public class MyRequest {

    //当前用户的请求方式
    private String method;

    //解析的请求中的请求地址
    private String url;

    //解析的请求中的项目名
    private String contextPath;

    //解析的请求中的站点名
    private String hostName;


    private InputStream inputStream;

    public MyRequest() {
    }

    public MyRequest(InputStream inputStream) throws IOException {
        this.inputStream = inputStream;

        /*
                获取请求的字节长度
                    因为我们进行的是网络请求，有时候可能会读不到数据，
                    所以此处的while循环是当读到有数据时再继续向下执行
             */
        int length = 0;
        while (length == 0){
            length = inputStream.available();
        }

        //将用户提交的数据读到字节数组中
        byte[] bytes = new byte[length];
        inputStream.read(bytes);

        // 转换成字符串
        String dataStr = new String(bytes);

        //解析该字符串
        String[] datas = dataStr.split("\\n");

        // 获取第一行请求信息
        String firstLine =datas[0] ;
        // 获取第一行请求信息
        String secondLine = datas[1];

        //解析第一行数据 ： 获取请求方式、项目名、请求地址
        String[] strings = firstLine.split(" ");

        //获取请求方式
        this.method = strings[0];

        //进行请求地址的拆分，拆分出项目名 和 该项目下的请求url
        //当indexOf =-1 说明说明请求没有项目名
        int indexOf = strings[1].indexOf("/",1);

        if (indexOf == -1){
            this.contextPath ="";
            this.url = strings[1].substring(0);
        }else {
            this.contextPath = strings[1].substring(1,indexOf);
            this.url = strings[1].substring(indexOf);
        }




        //解析第二行数据： 获取站点信息
        this.hostName = secondLine.substring(secondLine.indexOf(" ")+1,
                secondLine.lastIndexOf(":"));
    }

    public String getContextPath() {
        return contextPath;
    }

    public void setContextPath(String contextPath) {
        this.contextPath = contextPath;
    }

    public String getHostName() {
        return hostName;
    }

    public void setHostName(String hostName) {
        this.hostName = hostName;
    }

    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }
}
